package com.ssm.service.impl;

import com.ssm.dao.CourseMapper;
import com.ssm.entity.Course;
import com.ssm.service.CourseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 课程服务实现类
 * 【Spring评分点: 服务层】
 * 使用@Service注解标识服务层组件
 */
@Service
public class CourseServiceImpl implements CourseService {

    /**
     * 【Spring评分点: IOC依赖注入】
     * 使用@Autowired注解实现依赖注入
     */
    @Autowired
    private CourseMapper courseMapper;

    /**
     * 查询所有课程
     * 【Spring Boot评分点: 缓存使用】
     * 使用@Cacheable注解实现方法结果的缓存
     */
    @Override
    @Cacheable(value = "courseList", key = "'all'")
    public List<Course> findAll() {
        return courseMapper.selectAll();
    }

    /**
     * 根据ID查询课程
     * 【Spring Boot评分点: 缓存使用】
     */
    @Override
    @Cacheable(value = "course", key = "#id")
    public Course findById(Integer id) {
        return courseMapper.selectById(id);
    }

    /**
     * 添加课程
     * 【Spring评分点: 事务管理】
     * 使用@Transactional注解实现事务管理
     * 【Spring Boot评分点: 缓存清除】
     * 使用@CacheEvict注解清除缓存
     */
    @Override
    @Transactional
    @CacheEvict(value = {"courseList", "course"}, allEntries = true)
    public boolean add(Course course) {
        return courseMapper.insert(course) > 0;
    }

    /**
     * 更新课程
     * 【Spring评分点: 事务管理】
     * 【Spring Boot评分点: 缓存清除】
     */
    @Override
    @Transactional
    @CacheEvict(value = {"courseList", "course"}, allEntries = true)
    public boolean update(Course course) {
        return courseMapper.update(course) > 0;
    }

    /**
     * 删除课程
     * 【Spring评分点: 事务管理】
     * 【Spring Boot评分点: 缓存清除】
     */
    @Override
    @Transactional
    @CacheEvict(value = {"courseList", "course"}, allEntries = true)
    public boolean delete(Integer id) {
        return courseMapper.deleteById(id) > 0;
    }

    /**
     * 根据教师名称查询课程
     * 【Spring Boot评分点: 缓存使用】
     */
    @Override
    @Cacheable(value = "courseList", key = "'teacher:' + #teacherName")
    public List<Course> findByTeacherName(String teacherName) {
        return courseMapper.selectByTeacherName(teacherName);
    }
} 